/**
 * Title:AccessTokenMapper<br>
 * Description:微信访问tokenDAL接口<br>
 * Copyright © Xiamen Dripstill  NetWorks Co.,Ltd.
 * @Create:2018-07-07<br>
 * @author:Sun Yijing<br>
 * @version: Object v1.0.0<br>
 * <br>
 * 修改历史:<br>
 * 修改人		修改日期		修改描述<br>
 * -----------------------------------<br>
 * <br>
 * <br>
 */
package com.yoooya.base.dao.third;

import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.yoooya.base.dao.DalMapper;
import com.yoooya.base.model.po.third.AccessTokenPo;
import com.yoooya.base.model.qo.third.AccessTokenQo;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.Date;
import java.util.List;

@DalMapper
public interface AccessTokenMapper {
	/**
	 * 根据条件查询记录集(不分页)
	 *
	 * @param qo
	 *            条件查询对象
	 * @return 返回查询列表
	 * @throws Exception
	 */
	List<AccessTokenPo> query(@Param("qo") AccessTokenQo qo) throws Exception;

	/**
	 * 根据条件查询记录集(采用Paginator组件进行分页)
	 *
	 * @param qo
	 *            条件查询对象
	 * @param pageBounds
	 *            组件分页对象
	 * @return 返回查询列表
	 * @throws Exception
	 */
	List<AccessTokenPo> query(@Param("qo") AccessTokenQo qo, PageBounds pageBounds) throws Exception;

	/**
	 * 根据主键查询记录
	 *
	 * @param id
	 *            主键ID
	 * @return 返回查询对象
	 * @throws Exception
	 */
	AccessTokenPo queryById(Long id) throws Exception;

	/**
	 * 根据条件查询记录总数
	 *
	 * @param qo
	 *            条件查询对象
	 * @return 返回统计记录
	 * @throws Exception
	 */
	int count(@Param("qo") AccessTokenQo qo) throws Exception;

	/**
	 * 根据主键删除记录
	 *
	 * @param id
	 * @return 返回删除结果
	 * @throws Exception
	 */
	int deleteById(Long id) throws Exception;

	/**
	 * 根据ID列表批量删除记录
	 *
	 * @param ids
	 *            ID列表
	 * @return 返回删除结果
	 * @throws Exception
	 */
	@Delete("delete from AccessToken where id in (${ids})")
	int deleteByBatch(@Param("ids") String ids) throws Exception;

	/**
	 * 保存记录,不管记录里面的属性是否为空
	 *
	 * @param record
	 *            插入记录
	 * @return 返回插入结果
	 * @throws Exception
	 */
	int insert(AccessTokenPo record) throws Exception;

	/**
	 * 根据主键更新属性不为空的记录
	 *
	 * @param record
	 *            更新记录对象
	 * @return 返回更新结果
	 * @throws Exception
	 */
	int updateById(AccessTokenPo record) throws Exception;

	/**
	 * 根据主键批量更新属性不为空的记录
	 *
	 * @param ids
	 *            更新ID列表
	 * @param record
	 *            更新记录对象
	 * @return 返回更新结果
	 * @throws Exception
	 */
	@Update("update AccessToken set createTime=#{record.createTime} where id in (${ids})")
	int updateByBatch(@Param("ids") String ids, @Param("record") AccessTokenPo record) throws Exception;

	/**
	 * 批量修改状态
	 *
	 * @param ids
	 *            更新ID列表
	 * @param status
	 *            批量修改状态
	 * @return 返回更新结果
	 * @throws Exception
	 */
	@Update("update AccessToken set status=#{status} where id in (${ids})")
	int updateStatusByBatch(@Param("ids") String ids, @Param("status") Integer status) throws Exception;

	/**
	 * 根据code查询Token
	 * 
	 * @param code
	 * @return
	 */
	@Select("select * from AccessToken where code=#{code}  limit 1;")
	AccessTokenPo queryByCode(@Param("code") String code);

	/**
	 * 更新Token
	 * 
	 * @param id
	 * @param token
	 * @param accessToken
	 * @param expiresIn
	 * @param time
	 * @param createTime
	 * @return
	 */
	@Update("update AccessToken set token=#{token},expiresIn=#{expiresIn},time=#{time},createTime=#{createTime} where id=#{id}")
	int updateToken(@Param("id") Long id, @Param("token") String token, @Param("expiresIn") Integer expiresIn,
                    @Param("time") Long time, @Param("createTime") Date createTime);

	/**
	 * 更新Token
	 * 
	 * @param token
	 * @return
	 */
	@Update("update AccessToken set time=0 where token=#{token}")
	int updateByTime(@Param("token") String token);

}